package com.rd.teacher.jichao.buke;

public class Test {

    public static void main(String[] args) {
        byte b1 = 1;
        byte b2 = 1;
//        System.out.println((byte)1);
        // byte short int long
        // 默认是int 在只有数字本身的时候 都是int类型
//        System.out.println(1);
        // 当byte遇到算术运算时 也会被转成int类型
        byte b3 = (byte) (b1 + b2);

        // byte -> Byte
        Byte b4 = 1;

        long l1 = 1;
//        System.out.println(1L);

        // 多态的声明方式
        // 声明时给出的父类类型，创建时给出的是子类类型
        // 编译时类型 -》 运行时类型
//        Object i = 1;
//        System.out.println(i instanceof Integer);
//        System.out.println(i instanceof Short);
//        System.out.println(i instanceof Byte);
//        System.out.println(i instanceof Long);
//        System.out.println("-----");
//
//        Object d = 1.1;
//        System.out.println(d instanceof Float);
//        System.out.println(d instanceof Double);
//        System.out.println("-----");
//
//        int a = 1;
//        int b = 1;
//        if (a != b && info()) {
//            System.out.println("执行了");
//        } else {
//            System.out.println("没有执行");
//        }
//
//        change2(1,2);


        // 1010 -> 101
        //  10 -> 5
        //  5 -> 2
        // 101 -> 10

        int[] arr = new int[]{1, 2, 3, 4, 5};
//        System.out.println(arr[-1]);
//        System.out.println(arr[5]);

//        String[] arr1 = new String[5];
        // {null,null,null,null,null}
        // 类 -》 对象 -》 方法
        // 类 -》 静态方法
//        System.out.println(arr1[0].length());


//        Object[] arr11 = new Object[5];
        // {Object, Object ...}
        // {int[], int[] ...}

        // { {1,2,3},{2,3,4} ...}


        //1）定义一个Flower花作为父类
        //属性：颜色 价格
        //属性要进行封装（即为每条私有属性写set，get方法）
        //定义无参构造方法，和传两个参数的有参构造方法一个。
        //方法：显示详细信息的方法showInfo
        //2）定义一个Rose玫瑰花类继承Flower类
        //玫瑰花自己的属性：产地（要求对产地属性进行封装 私有化属性）
        //重写父类中的显示详细信息的方法showInfo，在重写的showInfo方法中通过super调用父类的showInfo方法；并显示产地信息。
        //再定义一个方法warn警告显示：不要摘玫瑰花，小心扎手！
        //3）定义测试类Test完成：
        //①实例化Flower类，调用构造方法赋值，并调用方法，输出：
        //花的颜色是白色，价格是10元
        //②实例化玫瑰花类，调用方法，输出：
        //花的颜色是紫色，价格是30元
        //产地是大理
        //不要摘玫瑰花，小心扎手！

        // 花 -》 品类
        // 玫瑰  百合  茉莉  ....
        // 对象 ： 一只玫瑰、 一只百合花、 一束玫瑰

    }

    public static boolean info() {
        System.out.println("执行info");
        return true;
    }


    // 将如下两个变量的值互换，int a = 1; int b = 2;  输出a = 2, b = 1
    public static void change(int a, int b) {
        System.out.println(a + "," + b);
        // 临时变量
        // a = 1 , b = 2
        // c = a = 1,  a = b = 2;
        // b = a = 1
        int c = a;
        a = b;
        b = c;
        System.out.println(a + "," + b);
    }

    public static void change1(int a, int b) {
        System.out.println(a + "," + b);
        // 换箱子
        // a = 1, b = 2;
        // a = a+b = 3;            a=3,b=2
        // b = a-b = 3 - 2 = 1     a=3,b=1
        // a = a-b = 3 - 1 = 2     a=2,b=1
        a = a + b;
        b = a - b;
        a = a - b;
        System.out.println(a + "," + b);
    }

    public static void change2(int a, int b) {
        System.out.println(a + "," + b);
        // ^异或
        // a = 1 -> 01
        // b = 2 -> 10
        // a ^ b =  11 -> 3

        // a = a ^ b = 3
        //   = 1 ^ 2

        // a ^ b = 3 -> 11
        // b = 2     -> 10
        // a ^ b ^ b -> 01 = 1
        // 一个数和另一个数异或两次 会得到自身

        // b = a ^ b = 1
        //   = 1 ^ 2 ^ 2

        // a = 3 -> 11
        // b = 1 -> 01
        // a ^ b -> 10 = 2

        // a = a ^ b = 2
        //   = (1 ^ 2) ^ (1 ^ 2 ^ 2)
        //   = 3 ^ ( 3 ^ 2)

        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        System.out.println(a + "," + b);
    }
}
